package com.bestcem.xm.award.dao;

import com.bestcem.xm.award.entity.pojo.AwardRequestDO;
import com.bestcem.xm.award.enums.AwardRequestStatusEnum;
import com.bestcem.xm.award.service.dto.awardaward.GetRequestStatsDTO;

import java.util.Date;

/**
 * AWARD_REQUEST表
 *
 * @author jie.yao <jie.yao@idiaoyan.com>
 * @version v1.0
 * @date 2021/6/30 15:29
 */
public interface AwardRequestDao {

    /**
     * 插入数据
     *
     * @param awardRequestDO 待插入数据
     * @return 插入结果
     */
    AwardRequestDO insert(AwardRequestDO awardRequestDO);

    /**
     * 根据id查询奖励请求
     * @param requestId 请求id
     * @return 请求记录
     */
    AwardRequestDO findById(String requestId);

    /**
     * 更新奖励请求状态
     *
     * @param requestId 请求id
     * @param status    原有奖励请求状态
     * @param awardId   查询条件 奖励id
     * @param newStatus 待更新的奖励请求状态
     * @return 返回更新前的记录
     */
    AwardRequestDO findAndModify(String requestId, AwardRequestStatusEnum status, String awardId, AwardRequestStatusEnum newStatus);

    /**
     * 根据surveySeq、deliverId查询request数量
     *
     * @param surveySeq 答卷唯一标识
     * @param deliverId 投放id
     * @return 匹配数量
     */
    long countAwardRequestBySurveySeqAndDeliverId(Long surveySeq, String deliverId);

    /**
     * 查询符合条件的AWARD_REQUEST表数量
     *
     * @param awardRequestDO 查询条件
     * @return 匹配数量
     */
    long countAwardRequestByAwardRequest(AwardRequestDO awardRequestDO);

    /**
     * 查询奖励请求数量和请求状态为请求通过的请求数量
     *
     * @param awardId   奖励id
     * @param deliverId 投放id(可选)
     * @return 奖励请求数量和请求状态为请求通过的请求数量
     */
    GetRequestStatsDTO getRequestCount(String awardId, String deliverId);

    /**
     * 查询奖励请求数量和请求状态为请求通过的请求数量
     *
     * @param awardId   奖励id
     * @param deliverId 投放id(可选)
     * @param day 所属日期
     * @return 奖励请求数量和请求状态为请求通过的请求数量
     */
    GetRequestStatsDTO getRequestCountDay(String awardId, String deliverId, Date day);

}
